//
//  SinaOauthViewController.swift
//  WeiBo
//
//  Created by Apple on 15/12/31.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit
import SVProgressHUD
import AFNetworking

// 遵守协议
class SinaOauthViewController: UIViewController , UIWebViewDelegate{

    // 
    let webView = UIWebView()
    
    override func loadView() {
        // 设置web页面为我的返回视图
        
        view = webView
        
    
        
        setupNav()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 跳转页面的时候,一定要注意背景颜色的问题
       view.backgroundColor = UIColor.whiteColor()
        
        /*
            NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
        */
        
        // 1. 加载授权页面
        
        // 1.1 创建一个 url
        let url = NSURL(string: "https://api.weibo.com/oauth2/authorize?client_id=3441808685&redirect_uri=http://www.baidu.com")
        // 1.2 创建一个 请求 -- 这个url可以强制解包,因为这个url是写死的
        let request = NSURLRequest(URL: url!)
        // 1.3 加载
        webView.loadRequest(request)
        
        
        // 2. 设置代理,然后拿到 url
        webView.delegate = self
    }

    
    
    
}


//MARK-- 这个是上午写的 设置导航控制器
extension SinaOauthViewController {

    //MARK:-- 设置页面的导航
    private func setupNav(){
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", style: UIBarButtonItemStyle.Plain, target: self, action: "dismiss")
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: UIBarButtonItemStyle.Plain, target: self, action: "autofill")
        
    }
    
    //MARK:-- nav按钮的实现方法 -- 讲一下变成私有就报错
    // 用private 修饰 按钮方法,按钮会找不到这个方法,
    // 如果你坚持用 private 的话,需要用 @objc 来修饰
    @objc private func dismiss(){
        
        dismissViewControllerAnimated(true) { () -> Void in
            
        }
        
    }
    
    func autofill(){
        
        // 1 js -- \是转义字符
        let js = "document.getElementById('userId').value = \"676876883@qq.com\";document.getElementById('passwd').value = \"fei1314.0\""
        // 2 让web页面加载 js,
        webView.stringByEvaluatingJavaScriptFromString(js)
    }

    
}
//MARK-- 显示一个加载忙的试图
extension SinaOauthViewController{
    //MARK:--web页面的代理方法
    func webViewDidStartLoad(webView: UIWebView) {
        //显示我们的加载页面
        SVProgressHUD.show()
    }
    
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
        // 消失加载页面
    }
    
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
        SVProgressHUD.dismiss()
    }
    
   
}

// 第一大步!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 截获Code.
//MARK:-- 重要的 WebView的代理方法,这个能够拦截请求,获取 code
extension SinaOauthViewController {
    
    // 一进行网络请求,就得问一问他
    // 返回 true ,让web加载
    // 返回false,就是进行拦截
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    
        
        // URL? 是可选项,有可能为空,如果为空,absoluteString 肯定没有值,所以需要进行 if let判断
        if let url = request.URL?.absoluteString {
            
            // String 有一个方法,是判断前缀
            //http://www.itcast.cn/?code=e107317b4a9164a69625dfb66c4e6b9c
            if url.hasPrefix(redirect_Url){
                
                // 截取code
                // url后边  ? 后边的东西,他 作为一个参数, 如果获取到这个参数,是不是可以获取
                // 因为只有一个参数,所以采用这个方法
                // code=aa04ee0e4198eb07eff8bb3a44ae8f7d
                if let code = request.URL?.query {
                    
                    // 第一大步!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    // 截获Code.
                    let subStr = code.substringFromIndex("code=".endIndex)
                    
                    // 第二大步!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    // 获取Token -- 必须获取到code之后再调用,因为这个code是我网络请求的一个必选参数
//                    let accountViewModel = SinaAccountViewModel()
                    
                   SinaAccountViewModel.shareInstance.getToken(subStr, success: { () -> () in
                    printLog("成功了")
                    
                    // 当授权认证成功之后,发布一个通知,来实现页面跳转
                    NSNotificationCenter.defaultCenter().postNotificationName(kNotificationEnter, object: self)
                    
                    }, failure: { (error) -> () in
                        printLog(error)
                   })
                }
                
                return false
                
                // 要不要返回 true
                // 如果你返回 true 会加载百度页面
                // 如果你返回false,就不进行加载
            }
        }
        
        return true
    }

    
}

//MARK:--
// 第二大步!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 获取Token
extension SinaOauthViewController {
    
    
}


//第三大步!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 获取到Token之后,进行获取个人信息的请求
extension SinaOauthViewController{
    
    
    
}

